From: kaf24@firebug.cl.cam.ac.uk Date: Thu, 27 Apr 2006 08:56:21 +0000 (+0100) Subject: Occasionally large smp machines fail to reboot properly and die under X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16108^2~72 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=44d7cc5f5d76daf7a9c7b956e474dff411954980;p=xen.git Occasionally large smp machines fail to reboot properly and die under an IPI storm of smp_call_function() to machine_reboot. Only the boot processor needs to run machine_restart, so send an IPI to CPU0. Original patch by: Ryan Harper Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/shutdown.c b/xen/arch/x86/shutdown.c index 97b41a94ca..bf9015280a 100644 --- a/xen/arch/x86/shutdown.c +++ b/xen/arch/x86/shutdown.c @@ -218,7 +218,9 @@ void machine_restart(char * __unused) /* Ensure we are the boot CPU. */ if ( GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_physical_apicid ) { - smp_call_function((void *)machine_restart, NULL, 1, 0); + /* Send IPI to the boot CPU (logical cpu 0). */ + on_selected_cpus(cpumask_of_cpu(0), (void *)machine_restart, + NULL, 1, 0); for ( ; ; ) safe_halt(); }